#!/usr/bin/python
# -*- coding:utf8
from math import sin,cos,pi

#преобразование в длину импульса
To_p=lambda x: 1.0/x-1



#одиночный пропагатор
delta_1=lambda p: 1.0/(p*p+1)

#двухимпульсный пропагатор для одного угла
delta_2=lambda p,q,q_1: 1.0/(p*p+q*q+2*p*q*cos(q_1)+1)

#двухимпульсный пропагатор для трёх углов
def delta_2d(p,q,q_1,q_2,q_3):
    s=cos(q_1)*cos(q_2)+sin(q_1)*sin(q_2)*cos(q_3)
    return 1.0/(p*p+q*q+2*p*q*s+1)

#трёхимпульсный пропагатор для трёх углов
def delta_3(p,q,v,q_1,q_2,q_3):
    s=cos(q_1)*cos(q_2)+sin(q_1)*sin(q_2)*cos(q_3)
    return 1.0/(p*p+q*q+v*v+2*p*q*cos(q_1)+2*p*v*cos(q_2)+2*q*v*s+1)

#якобиан от импульсов, вход - массив чисел от нуля до единицы
def jack_p(arr):
    arr.insert(0,1)
    return reduce(lambda x,y: x*y*y*y*(y+1)*(y+1) , arr)




#якобиан от углов, вход - массив чисел от нуля до единицы - когда углов два или один
def jack_a_1(arr):
    S=1
    for el in arr: 
        S=S*sin(el)*sin(el)*2.0/pi
    return S
#якобиан от углов, вход - массив чисел от нуля до единицы - когда углов больше двух
def jack_a_2(arr):
    S=1
    for el in arr: 
        S=S*sin(el)*sin(el)*2.0/pi
    return S/2.0
